[アップデート] AWS App Runner でついに AWS WAF がサポートされました
いわさです。
Route 53 エイリアスレコードや HTTPS リダイレクトなど、Web アプリケーションとして通常は利用したいが App Runner では対応していなかった機能が多かったのですが最近のアップデートでどんどんこれらがサポートされています。
- AWS App Runner で Route 53 エイリアスレコードがサポートされました | DevelopersIO
- [アップデート] AWS App Runner の環境変数ソースで Secrets Manager と SSM パラメータストアがサポートされました | DevelopersIO
- [アップデート] AWS App RunnerでHTTPからHTTPSへのリダイレクトがサポートされました | DevelopersIO
そんな中、本日のアップデートでついに App Runner で AWS WAF が使えるようになりました。
早速試してみましょう。
適当な App Runner サービス
以前以下の記事で App Runner サービスを作成し眠らせておいたのでこれを使いましょう。
以下のリクエストで Secrets Manager と SSM パラメータストアの値をレスポンスするというアプリケーションです。
% curl https://39ue7pd32b.ap-northeast-1.awsapprunner.com/api/hoge | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 58 0 58 0 0 348 0 --:--:-- --:--:-- --:--:-- 355 [ "{\"hogesecret\":\"secretvalue3\"}", "ssmparametervalue3" ]
App Runner に AWS WAF を設定
設定方法は簡単で、App Runner の設定画面で作成した Web ACL を選択するだけです。
今回は次のように hoge ヘッダーに fuga という値が含まれている場合にブロックするカスタムルールを作成しました。
App Runner では新規作成時あるいは更新時に、セキュリティ設定箇所に WAF を有効化する項目が追加されています。
以下のようにトグルが OFF になっていると WAF が関連付いていない状態です。
以下は WAF を関連付けした状態です。
トグルを ON にして Web ACL を選択します。ここでは App Runner が東京リージョンなので、Web ACL も東京リージョンで作成しています。
設定後、反映まで少し時間がかかります。私が確認した際には 1 ~ 2 分かかりました。
反映後すぐはセキュリティの欄に WAF の情報が表示されなかったのですが、少し待つと次のように表示されるようになりました。
動作確認
ではカスタムヘッダーを付与してリクエストを送信してみます。
% curl -H "hoge:fuga" https://39ue7pd32b.ap-northeast-1.awsapprunner.com/api/hoge | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 32 100 32 0 0 174 0 --:--:-- --:--:-- --:--:-- 180 { "hoge": "fuga waf blocked" }
期待どおりブロックされ、Web ACL で設定したカスタムレスポンスが返却されています。
WAF のログ(ここでは CloudWatch Logs)を確認してみると、次のように APPRUNNER が httpSourceName として設定されたログを確認することが出来ました。
httpSourceId は App Runner の対象リソースを指しています。
今回使った App Runner の ARN は次のようになっていて、リソースID と AWS アカウント ID が出力されています。
arn:aws:apprunner:ap-northeast-1:123456789012:service/hoge0107dotnetenv/3c6546695fbc48f8930ff4cf481db181
IP アドレス制限も当然出来る
AWS WAF が使えるのでもちろん IP アドレスでのアクセス制限も WAF のレイヤーで簡単に制御することが出来ます。
次のように IP アドレスリストを用意して IP アドレスによるブロックを試してみます。
% curl https://39ue7pd32b.ap-northeast-1.awsapprunner.com/api/hoge | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 34 100 34 0 0 53 0 --:--:-- --:--:-- --:--:-- 53 { "error": "blocked ip address" }
ブロックされました。良いですね。
さいごに
簡単はありますが、本日は App Runner でついに AWS WAF がサポートされたので試してみました。
これは App Runner ユーザーが随分と待ち望んでいた機能のひとつではないでしょうか。
東京リージョンでも今日から使えましたので、是非みなさん使ってみてください。